Shallow Copy এবং Deep Copy এর মধ্যে পার্থক্য

Java Technologies - Java.lang প্যাকেজ (Java.lang Package) - Cloneable ইন্টারফেস এবং Object Cloning
254

Java তে copying একটি অবজেক্ট বা ডাটা স্ট্রাকচার তৈরি করার সময় দুটি সাধারণ ধরনের কপি অপারেশন থাকে: Shallow Copy এবং Deep Copy। এগুলি অবজেক্টের কপি তৈরি করার প্রক্রিয়া এবং কিভাবে রেফারেন্স এবং ডাটা কপি করা হয় তার ওপর নির্ভর করে ভিন্ন হয়।

Shallow Copy (শ্যালো কপি)

Shallow Copy হল একটি কপি অপারেশন যেখানে নতুন অবজেক্টের মধ্যে কেবলমাত্র অবজেক্টের রেফারেন্স কপি করা হয়, অর্থাৎ মূল অবজেক্টের উপাদানগুলির মধ্যে যে রেফারেন্স থাকে তা নতুন কপিতে কপি হয়। তবে, এর মধ্যে অবজেক্টের আসল কন্টেন্ট (অথবা ডাটা) কপি হয় না। অর্থাৎ, শ্যালো কপি করলে মূল অবজেক্ট এবং কপি করা অবজেক্ট একই অর্গানিক বা ডাটা স্ট্রাকচার শেয়ার করতে পারে।

Shallow Copy Example:

class Person {
    String name;
    int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class ShallowCopyExample {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 30);
        Person person2 = person1; // Shallow copy (just reference is copied)
        
        System.out.println(person1.name); // Output: Alice
        System.out.println(person2.name); // Output: Alice
        
        person2.name = "Bob";  // Modify person2
        
        System.out.println(person1.name); // Output: Bob (since both refer to same object)
        System.out.println(person2.name); // Output: Bob
    }
}

Explanation:

  • person2 = person1; লাইনটি একটি shallow copy তৈরি করে। এখানে, person2 একটি নতুন অবজেক্ট তৈরি করে না, বরং এটি person1 এর রেফারেন্স শেয়ার করে।
  • যখন person2 এর name পরিবর্তন করা হয়, তখন person1 এরও একই পরিবর্তন ঘটে, কারণ তারা একই অবজেক্টের দিকে রেফারেন্স করছে।

Deep Copy (ডিপ কপি)

Deep Copy হল একটি কপি অপারেশন যেখানে মূল অবজেক্টের কন্টেন্ট (অথবা ডাটা) সম্পূর্ণভাবে কপি করা হয়, এবং এই কপি নতুন একটি অবজেক্ট হিসেবে তৈরি হয়। এর মানে হল যে, মূল অবজেক্ট এবং কপি করা অবজেক্ট একে অপরের থেকে স্বাধীন থাকে, এবং একটি অবজেক্টে পরিবর্তন করলে অন্যটির ওপর কোনো প্রভাব পড়ে না। ডিপ কপি সাধারণত recursive copy এর মাধ্যমে কাজ করে, যেখানে অবজেক্টের ভিতরে থাকা অন্য অবজেক্টগুলিও কপি করা হয়।

Deep Copy Example:

class Person {
    String name;
    int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // Deep copy constructor
    public Person(Person other) {
        this.name = other.name;
        this.age = other.age;
    }
}

public class DeepCopyExample {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person(person1); // Deep copy (new object with copied data)
        
        System.out.println(person1.name); // Output: Alice
        System.out.println(person2.name); // Output: Alice
        
        person2.name = "Bob";  // Modify person2
        
        System.out.println(person1.name); // Output: Alice (no change in person1)
        System.out.println(person2.name); // Output: Bob (change in person2)
    }
}

Explanation:

  • Person person2 = new Person(person1); লাইনটি একটি deep copy তৈরি করে, যেখানে person2 একটি নতুন অবজেক্ট তৈরি করে এবং person1 এর সমস্ত ডাটা কপি করে।
  • person2 এর name পরিবর্তন করলে person1 এর উপর কোনো প্রভাব পড়ে না, কারণ তারা একে অপরের থেকে স্বাধীন।

Shallow Copy এবং Deep Copy এর মধ্যে পার্থক্য

বৈশিষ্ট্যShallow CopyDeep Copy
কপি কী হয়শুধুমাত্র অবজেক্টের রেফারেন্স কপি হয়, আসল ডাটা শেয়ার করা হয়।পুরো অবজেক্টের কন্টেন্ট বা ডাটা কপি করা হয়, নতুন অবজেক্ট তৈরি হয়।
রেফারেন্স কপিরেফারেন্স কপি করা হয়, অর্থাৎ নতুন অবজেক্ট পুরোনো অবজেক্টের রেফারেন্স শেয়ার করে।নতুন অবজেক্ট তৈরি হয়, পুরোনো অবজেক্টের ডাটা কপি করা হয়।
প্রভাবমূল অবজেক্ট এবং কপি করা অবজেক্ট একই ডাটা শেয়ার করে, তাই একটিতে পরিবর্তন হলে অন্যটিতেও পরিবর্তন হয়।মূল অবজেক্ট এবং কপি করা অবজেক্ট একে অপরের থেকে স্বাধীন থাকে।
উদাহরণperson2 = person1; — শুধু রেফারেন্স কপি।person2 = new Person(person1); — সম্পূর্ণ কপি, নতুন অবজেক্ট।
কখন ব্যবহার করবেনযখন ডাটা শেয়ার করার প্রয়োজন থাকে এবং ডাটা পরিবর্তন হলে অন্য অবজেক্টেও প্রভাব পরতে পারে না এমন ক্ষেত্রে।যখন দুটি অবজেক্ট একে অপর থেকে সম্পূর্ণভাবে স্বাধীন থাকতে হবে।

  • Shallow Copy দ্রুত এবং কম মেমরি ব্যবহার করে, তবে এটি মূল এবং কপি করা অবজেক্টের মধ্যে ডাটা শেয়ার করে, তাই একটির পরিবর্তন অন্যটির উপরে প্রভাব ফেলতে পারে।
  • Deep Copy ডাটা এবং অবজেক্টের মধ্যে সম্পূর্ণ স্বাধীনতা নিশ্চিত করে, কিন্তু এটি বেশি মেমরি ব্যবহার করে এবং কিছুটা ধীর হতে পারে।

আপনি কোনটি ব্যবহার করবেন তা আপনার প্রয়োজনে এবং সমস্যার প্রকারের উপর নির্ভর করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...